﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using SIM.Geo.BE;
using System.Linq;

namespace SIM.Geo.DA
{
    public class DACuerpo : Base
    {
        #region Metodos
        /// <summary>
        /// Método que devuelve la lista de Cuerpos
        /// </summary>
        /// <returns></returns>
        public List<Cuerpo> ListarCuerpo()
        {
            return this.Context.Cuerpo.ToList();
        }
        /// <summary>
        /// Método inserta un nuevo cuerpo minero
        /// </summary>
        /// <param name="cuerpo"></param>
        /// <returns></returns>
        public int InsertarCuerpo(Cuerpo cuerpo)
        {
            this.Context.Cuerpo.AddObject(cuerpo);
            this.Context.SaveChanges();
            return cuerpo.CodigoCuerpo;
        }
        /// <summary>
        /// Método modificar un cuerpo minero
        /// </summary>
        /// <param name="cuerpo"></param>
        public void ModificarCuerpo(Cuerpo cuerpo)
        {
            this.Context.Cuerpo.Attach(cuerpo);
            this.Context.ObjectStateManager.ChangeObjectState(cuerpo, EntityState.Modified);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método eliminar cuerpo minero
        /// </summary>
        /// <param name="cuerpo"></param>
        public void EliminarCuerpo(Cuerpo cuerpo)
        {
            this.Context.Cuerpo.Attach(cuerpo);
            this.Context.ObjectStateManager.ChangeObjectState(cuerpo, EntityState.Deleted);
            this.Context.SaveChanges();
        }

        public List<CuerpoResponse> ListarCuerpo1()
        {

            return this.Context.Cuerpo.Where(x => x.CodigoZona == x.Zona.CodigoZona)
                .Select(x => new CuerpoResponse
                {
                    CodigoCuerpo = x.CodigoCuerpo,
                    Nombre =x.Nombre,
                    CodigoZona = x.CodigoZona,
                    NombreZona = x.Zona.Descripcion
                }
                
                ).ToList();

        }
        /// <summary>
        ///Método devuelve un cuerpo minero por codigo
        /// </summary>
        /// <param name="codigoCuerpo"></param>
        /// <returns></returns>
        public Cuerpo ObtenerCuerpo(int codigoCuerpo)
        {
            return this.Context.Cuerpo.Where(x => x.CodigoCuerpo.Equals(codigoCuerpo)).FirstOrDefault();
        }
        /// <summary>
        /// Método listar cuerpo minero por nombre
        /// </summary>
        /// <param name="nombreCuerpo"></param>
        /// <returns></returns>
        public List<Cuerpo> ListarCuerpoPorNombre(string nombreCuerpo)
        {
            return this.Context.Cuerpo.Where(x => x.Nombre.ToUpper().Equals(nombreCuerpo.ToUpper())).ToList();
        }
        /// <summary>
        /// Método que devuelve la lista de Cuerpos
        /// </summary>
        /// <returns></returns>
        public List<Cuerpo> ListarCuerpoPorZona(int codigoZona)
        {
            return this.Context.Cuerpo.Where(x => x.CodigoZona == codigoZona).ToList();
        }
        
        #endregion

    }
}
